# 定义一个字典
dict1 = {'name': '小芳', 'age': 40, 'gender': '男', 'weight': 60}

# 1. 使用键查询值
# 格式: 变量[键]
print(dict1['name'])  # 小芳
print(dict1['age'])  # 40
print(dict1['gender'])  # 男
print(dict1['weight'])  # 60

# 注意: 使用这种方法获取值,如果键不存在,则报错
# KeyError: 'height'  没有这个键会报错
# print(dict1['height'])

print("------------------------------")
# 2. 使用get方法查询数据
# 格式: 变量.get(键, 默认值) 如果键不存在则返回默认值, 如果没有指定默认值返回None
print(dict1.get('name'))  # 小芳
print(dict1.get('age'))  # 男
print(dict1.get('gender'))  # 40

# 当使用get方法查询数据时,没有该键会自动返回默认值None
print(dict1.get('height'))  # None

# 当我们查询的键不存在时,我们也可以指定返回的默认值
print(dict1.get('height', '无此数据'))  # 无此数据

print("------------------------------")
# 3. keys 查询字典中所有的键
print(dict1.keys())  # dict_keys(['name', 'age', 'gender', 'weight'])
print(type(dict1.keys()))

print("------------------------------")
# 4. values 查询字典中所有的值
print(dict1.values())  # dict_values(['小芳', 40, '男', 60])

print("------------------------------")
# 5. items 查询字典中所有的键值对, 以元组的方式返回每一个键值对
print(dict1.items())  # dict_items([('name', '小芳'), ('age', 40), ('gender', '男'), ('weight', 60)])

# 注意: keys, values, 和 items 返回的数据类型不是列表类型,想要使用内部的数据,要么转换为list 要么遍历

print("------------------------------")
dict_keys = dict1.keys()
# TypeError: 'dict_keys' object is not subscriptable
# keys方法获取的是dict_keys类型数据, 不支持使用索引获取子元素
# print(dict_keys[1])

# keys, values, 和 items 的结果可以转换为list类型数据
print(list(dict_keys))  # ['name', 'age', 'gender', 'weight']
